/**
 * @author Tobias Boehm
 *
 * 03.06.2011
 */
package org.anddev.andengine.extension.tbsengine.map;

import org.anddev.andengine.extension.tbsengine.gameobject.Doodad;
import org.anddev.andengine.extension.tbsengine.gameobject.GameObject;
import org.anddev.andengine.extension.tbsengine.gameobject.Unit;
import org.anddev.andengine.extension.tbsengine.region.AbsRegion;
import org.anddev.andengine.extension.tbsengine.scene.AbsIngameScene;

/**
 * This interface contains some configuration parameters
 * (static fields and static enums) related to maps.
 * 
 * @author Tobias Boehm
 */
public interface TBSmapConstants {

	/**
	 * Every {@link AbsIngameScene} contains at least the following five layers.
	 * <p>
	 * {@link BaseMapTileLayer#ground}- Layer 0<br>
	 * {@link BaseMapTileLayer#decorations} - Layer 1<br>
	 * {@link BaseMapObjectGroup#doodads} - Layer 2<br>
	 * {@link BaseMapObjectGroup#playergameobjects} - Layer 3<br>
	 * {@link BaseMapObjectGroup#areas} - Layer 4<br>
	 */
	public static final int TBSE_SCENE_INGAME_LAYER_COUNT = 5;
	
	/**
	 * This is the standard map file suffix.
	 */
	public static final String STANDARD_MAP_FILE_SUFFIX = "tmx";
	
	/**
	 * This are some basic map properties. 
	 * 
	 * @author Tobias Boehm
	 */
	public static enum BaseMapProperty{
		
		/**
		 * The ID of a map (usually a {@link String}).
		 */
		id,
		
		/**
		 * The version number of a map (usually an {@link Integer}).
		 */
		version,
		
		/**
		 * The name of a map (usually a {@link String}).
		 */
		name,
		
		/**
		 * The width in Tiles of a map (usually an {@link Integer}).
		 */
		width,
		
		/**
		 * The height in Tiles of a map (usually an {@link Integer}).
		 */
		height
	};
	
	/**
	 * This are some basic map tile layers.
	 * 
	 * @author Tobias Boehm
	 */
	public static enum BaseMapTileLayer{
		
		/**
		 * The ground layer is the first layer of a map. In most cases it 
		 * contains sand, water, lava, rocks or other kinds of soils.
		 */
		ground,
		
		/**
		 * The decoration layer contains all kinds of static non-animated 
		 * decorations which could be placed on top of the ground layer. They 
		 * can influence the accessibility of a ground tile but they do not 
		 * interfere actively with the game world.
		 */
		decorations
	};
	
	/**
	 * This are some basic map object group layers.
	 * 
	 * @author Tobias Boehm
	 *
	 */
	public static enum BaseMapObjectGroup{
		
		/**
		 * This object group contains positions of {@link Doodad}s.
		 */
		doodads,
		
		/**
		 * This object group contains positions of {@link Unit}s.
		 */
		playergameobjects,
		
		/**
		 * This object group contains positions of {@link AbsRegion}s 
		 * and other kinds of areas.
		 */
		areas
	}
	
	/**
	 * This are some basic {@link GameObject} property fields.
	 * 
	 * @author Tobias Boehm
	 *
	 */
	public static enum BaseGameObjectPropertyField{type};
	
	/**
	 * This are some basic manifestations of 
	 * {@link BaseGameObjectPropertyField} values.
	 * 
	 * @author Tobias Boehm
	 *
	 */
	public static enum BaseMapObjectPropertyValue{startingpoint};
	
}
